package com.fdb.efp.nls.common.util;

import com.fdb.basic.framework.core.util.StringUtil;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;

import java.io.IOException;

public class ItextPdfUtil {

	/**
	 * 
	 * 字体初始化 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static Font setFont(int size, int style) throws  IOException, DocumentException {
		// 设置字体样式（支持中文）
		BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
		Font font = new Font(bf);
		// 18号字体
		font.setSize(size);
		// 粗体
		font.setStyle(style);
		return font;
	}

	/**
	 * 
	 * 字体初始化加颜色 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static Font setFont(int size, int style, BaseColor color) throws DocumentException, IOException {
		Font font = setFont(size, style);
		// 颜色
		font.setColor(color);
		return font;
	}

	/**
	 * 
	 * 表格初始化 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static PdfPTable setPdfPTable(int numColumns, float spacingBefore, float spacingAfter, float totalWidth, float minimumHeight) {
		PdfPTable pfPTable = new PdfPTable(numColumns);
		// 表格前间距
		pfPTable.setSpacingBefore(spacingBefore);
		// 表格后间距
		pfPTable.setSpacingAfter(spacingAfter);
		// 居中
		pfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
		pfPTable.setTotalWidth(totalWidth);
		// 列高度
		pfPTable.getDefaultCell().setMinimumHeight(minimumHeight);
		pfPTable.setLockedWidth(true);
		return pfPTable;
	}

	/**
	 * 
	 * 表格内容设置 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static PdfPTable setCellContent(PdfPTable pfPTable, Font cellFont, Font tabFont, int cellNum, String cellTitile[], int colSpan[],
			String cellContent[]) throws Exception {
		// 设置单元格标题和内容
		for (int i = 0; i < cellTitile.length; i++) {
			if (i >= cellContent.length) {
				break;
			}
			PdfPCell cellCell = setCell(cellFont, cellTitile[i], colSpan[i]);
			PdfPCell tabCell = setCell(tabFont, cellContent[i], colSpan[i]);
			pfPTable.addCell(cellCell);
			pfPTable.addCell(tabCell);
			if (cellNum % 2 == 1 && i % 2 == 0) {
				pfPTable.addCell(new Paragraph(" ", tabFont));
			}
		}
		return pfPTable;
	}

	/**
	 * 
	 * 表格内容设置 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static PdfPTable setCellContent(PdfPTable pfPTable, Font cellFont, Font tabFont, int cellNum, String cellTitile[],
			int colCellSpan[], int colSpan[], String cellNewCont[], String cellOldCont[]) throws Exception {
		// 设置单元格标题和内容
		for (int i = 0; i < cellTitile.length; i++) {
			if (i >= cellNewCont.length || i >= cellOldCont.length) {
				break;
			}
			// 表格字体设置
			Font tabRedFont = ItextPdfUtil.setFont(12, Font.NORMAL, BaseColor.RED);
			if (!StringUtil.isNullorBank(cellNewCont[i]) && !cellNewCont[i].equals(cellOldCont[i]) || StringUtil.isNullorBank(cellNewCont[i]) && !StringUtil.isNullorBank(cellOldCont[i])) {
				PdfPCell cellCell = setCell(tabRedFont, cellTitile[i], colCellSpan[i]);
				PdfPCell tabNewCell = setCell(tabRedFont, cellNewCont[i], colSpan[i]);
				PdfPCell tabOldCell = setCell(tabRedFont, cellOldCont[i], colSpan[i]);
				pfPTable.addCell(cellCell);
				pfPTable.addCell(tabNewCell);
				pfPTable.addCell(tabOldCell);
			} else {
				PdfPCell cellCell = setCell(cellFont, cellTitile[i], colCellSpan[i]);
				PdfPCell tabNewCell = setCell(tabFont, cellNewCont[i], colSpan[i]);
				PdfPCell tabOldCell = setCell(tabFont, cellOldCont[i], colSpan[i]);
				pfPTable.addCell(cellCell);
				pfPTable.addCell(tabNewCell);
				pfPTable.addCell(tabOldCell);
			}
			if (cellNum % 2 == 1 && i % 2 == 0) {
				pfPTable.addCell(new Paragraph(" ", tabFont));
			}
		}
		return pfPTable;
	}

	/**
	 * 
	 * 列设置 <br>
	 * 0.1:ludayong:2019年9月17日 上午8:36:54:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年9月17日 上午8:36:54
	 * @date 2019年9月17日 上午8:36:54
	 * @version 0.1
	 */
	public static PdfPCell setCell(Font cellFont, String cellContent, int colSpan) throws Exception {
		// 设置单元格
		PdfPCell cell = new PdfPCell(new Phrase(cellContent, cellFont));
		cell.setColspan(colSpan);
		return cell;
	}
}
